package ogloszenia.bazadanych;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

import ogloszenia.widok.ZsmStraznik;
import ogloszenia.widok.ogloszenie;

public class bazadanych {


	public static bazadanych instancja=new bazadanych();
	public static bazadanych instancja(){
		return instancja;
	}
	public static void oo(){
		EntityManagerFactory emf = Persistence.createEntityManagerFactory("oracle");
		EntityManager em = emf.createEntityManager();
		em.getTransaction().begin();
		ZsmStraznik pp=new ZsmStraznik();
		pp.setIlosc(2);
		pp.setNazwa("ss");
		em.persist(pp);
		em.getTransaction().commit();
		em.close(); 
	}
	public  static List<Wojewodztwo> pobierz_wojewodztwa(){
		EntityManagerFactory emf = Persistence.createEntityManagerFactory("manager1");
		EntityManager em = emf.createEntityManager();
		em.getTransaction().begin();
		List<Wojewodztwo> a =em.createNamedQuery("1wojewodztwawszystkiewojewodztwa").getResultList();
		em.getTransaction().commit();
		em.close();
		return a;
	}
	public static List<ZsmOgloszenie> pobierzWgWojewodztwaMiasta(String woj,String miasto){
		EntityManagerFactory emf = Persistence.createEntityManagerFactory("manager1");
		EntityManager em = emf.createEntityManager();
		em.getTransaction().begin();
		Wojewodztwo o = new Wojewodztwo();
		o.setNazwa(woj);
		o.setId(pobierzIdWojewodztwa(woj));
		Miasto m=new Miasto();
		m.setNazwa(miasto);
		m.setId(pobierzIdMiasta(miasto));
		System.out.println(o.getNazwa()+' '+m.getNazwa());
		List<ZsmOgloszenie> ogloszenie=em.createNamedQuery("2ogloszeniawszystkieWOJEWODZTWAMIASTA")
				.setParameter("wojewodztwo",o )
				.setParameter("miasto", m).getResultList();
		System.out.println("wielkosc w baza danych"+ogloszenie.size());
		em.getTransaction().commit();
		em.close();
		return  ogloszenie;
	}
	public static List<Miasto> pobierzMiastaWgWojewodztwa(String wojewodztwo)
	{
		EntityManagerFactory emf = Persistence.createEntityManagerFactory("manager1");
		EntityManager em = emf.createEntityManager();
		em.getTransaction().begin();
		Wojewodztwo temp=new Wojewodztwo();
		int f=pobierzIdWojewodztwa(wojewodztwo);
		temp.setId(f);
		temp.setNazwa(wojewodztwo);
		List<Miasto>  lista=em.createNamedQuery("1szukajwszystkiemiastawgwojewodztwa").setParameter("wojewodztwo", temp).getResultList();
		em.getTransaction().commit();
		em.close();
		return lista;
	}
	public static int dodajWojewodztwo(String nazwa){
		int id=0;
		if((id=pobierzIdWojewodztwa(nazwa))!=-1)
			return id;
		else
		{
			EntityManagerFactory emf = Persistence.createEntityManagerFactory("manager1");
			EntityManager em = emf.createEntityManager();
			em.getTransaction().begin();
			Wojewodztwo temp=new Wojewodztwo();
			temp.setNazwa(nazwa);
			em.getTransaction().commit();
			em.close();
			System.out.println(temp.getId());
			return temp.getId();
		}
			
	}
	public  static int pobierzIdMiasta(String miejscowosc){
		EntityManagerFactory emf = Persistence.createEntityManagerFactory("manager1");
		EntityManager em = emf.createEntityManager();
		em.getTransaction().begin();
		int id =((Miasto)em.createNamedQuery("1szukajmiasta").setParameter("nazwa", miejscowosc).getSingleResult()).getId();
		em.getTransaction().commit();
		em.close();
		System.out.println(id);
		return id;
	}
	public  static int pobierzIdWojewodztwa(String nazwa){
		int id=-1;
		EntityManagerFactory emf = Persistence.createEntityManagerFactory("manager1");
		EntityManager em = emf.createEntityManager();
		em.getTransaction().begin();
		id=((Wojewodztwo)em.createNamedQuery("1wojewodztwaszukajwojewodztwawgnazwy").setParameter("nazwa", nazwa).getSingleResult()).getId();
		em.getTransaction().commit();
		em.close();
		System.out.println(id);
		return id;
	}
	public  static List<Miasto> pobierz_miasta(){
		EntityManagerFactory emf = Persistence.createEntityManagerFactory("manager1");
		EntityManager em = emf.createEntityManager();
		em.getTransaction().begin();
		List<Miasto> aa =em.createNamedQuery("1szukajwszystkiemiasta").getResultList();//.createNamedQuery("wojewodztwa_wszystkiewojewodztwa").getResultList();
		em.getTransaction().commit();
		em.close();
		return aa;
	}
	public static int dodajogloszenie(ogloszenie og,String[] tablica){
		int idDodany=0;
		EntityManagerFactory emf = Persistence.createEntityManagerFactory("manager1");
		EntityManager em = emf.createEntityManager();
		Miasto m=new Miasto();
		Wojewodztwo w=new Wojewodztwo();
		em.getTransaction().begin();
		m.setId(pobierzIdMiasta(tablica[1]));
		w.setId(pobierzIdWojewodztwa(tablica[2]));
		System.out.println(Integer.parseInt(tablica[0]));
		switch(Integer.parseInt(tablica[0]))
		{
		case 0:
			System.out.println("w 0");
			ZsmOgloszenie zsmo=new ZsmOgloszenie();
			zsmo.setKontakt(og.getKontakt());
			zsmo.setTresc(og.getTresc());
			zsmo.setMiasto(m);
			zsmo.setWojewodztwo(w);
			em.persist(zsmo);
			em.getTransaction().commit();
			em.close();
			idDodany=zsmo.getId();
			
			break;
		case 2:
			System.out.println("w 2");
			ZsmOgloszenieInne zsmoi=new ZsmOgloszenieInne();
			zsmoi.setKontakt(og.getKontakt());
			zsmoi.setTresc(og.getTresc());
			zsmoi.setMiasto(m);
			zsmoi.setWojewodztwo(w);
			em.persist(zsmoi);
			em.getTransaction().commit();
			em.close();
			idDodany=zsmoi.getId();
			break;
		case 1:
			System.out.println("w 1");
			ZsmOgloszenieZwierze zsmoz=new ZsmOgloszenieZwierze();
			zsmoz.setKontakt(og.getKontakt());
			zsmoz.setTresc(og.getTresc());
			zsmoz.setMiasto(m);
			zsmoz.setWojewodztwo(w);
			em.persist(zsmoz);
			em.getTransaction().commit();
			em.close();
			idDodany=zsmoz.getId();
			break;
		}
		
		System.out.println(idDodany);
		return idDodany;
	}
	public static int dodajstraznika(){
		int idDodany=0;
		EntityManagerFactory emf = Persistence.createEntityManagerFactory("manager1");
		EntityManager em = emf.createEntityManager();
		Miasto m=null;
		Wojewodztwo w=null;
		em.getTransaction().begin();
			ZsmOgloszenie zsmo=new ZsmOgloszenie();
			zsmo.setKontakt("a");
			zsmo.setTresc("ss");
			m=new Miasto();
			m.setId(89);
			w=new Wojewodztwo();
			w.setId(2);
			zsmo.setMiasto(m);
			zsmo.setWojewodztwo(w);
			em.persist(zsmo);
			idDodany=zsmo.getId();
		em.getTransaction().commit();
		em.close();
		System.out.println("dodano");
		return idDodany;
	}
	public  List<ZsmStraznik> getZsmStraznikList(){
		EntityManagerFactory emf = Persistence.createEntityManagerFactory("manager1");
		EntityManager em = emf.createEntityManager();
		em.getTransaction().begin();
		List<ZsmStraznik> aa=em.createNamedQuery("szukajwszystkiemiasta").getResultList();
		em.getTransaction().commit();
		return  aa;
	}
	public  List<?> getOgloszenia(int param){
		String sql="";
		switch(param)
		{
		case 1:
			sql="2ogloszeniawszystkie";
			break;
		case 2:
			sql="";
			break;
		case 3:
			sql="3ogloszeniawszystkie";		
		}
		EntityManagerFactory emf = Persistence.createEntityManagerFactory("manager1");
		EntityManager em = emf.createEntityManager();
		em.getTransaction().begin();
		List<?> ogloszenie=em.createNamedQuery(sql).getResultList();
		em.getTransaction().commit();
		return  ogloszenie;
	}
}
